#include <glibmm-2.4/glibmm/refptr.h>
#include <gtkmm-3.0/gtkmm/widget.h>
#include <gtkmm-3.0/gtkmm/container.h>
#include <gdkmm/general.h>
#include <gtkmm/button.h>
#include <gtkmm-3.0/gtkmm/image.h>

#include "VentanaMenuPrincipal.h"
#include "../Juego-Vista/ThreadInterfazGrafica.h"
#include "Excepcion.h"

#define		PATH_LOGO		"/home/nahuel/75.42 TP5/trunk/Fuentes/Recursos/logo.png"

// Borrar despues
//#include <iostream>

VentanaMenuPrincipal::VentanaMenuPrincipal(Cliente* cliente) {
	_cliente = cliente;
	
	// TODO: Hacer que el logo se reescale al cambiar el tamanho de la ventana
	Glib::RefPtr<Gdk::Pixbuf> imagenLogo = 
			Gdk::Pixbuf::create_from_file(PATH_LOGO)->scale_simple(
			600,//TAMANHO FIJO!!
			400,//TAMANHO FIJO!!
			Gdk::INTERP_NEAREST);
	
	_logo.set(imagenLogo);
	
	
	
	_ventanaMenuCliente = NULL;
	_ventanaMenuClienteAbierta = false;
	
	_grid = new Gtk::Grid;
	
	set_title("Cerditos Furiosos - Menu");
//	set_default_icon_from_file(RUTA_ICONO_VENTANA);
	set_position(Gtk::WIN_POS_CENTER);
	set_default_size(800, 400);
	
	
	// TODO
//	_logo.set(../);
	
	_singleplayerButton.signal_clicked().connect(sigc::mem_fun(*this, &VentanaMenuPrincipal::on_JugarSingleplayer_clicked));
	_multiplayerButton.signal_clicked().connect(sigc::mem_fun(*this, &VentanaMenuPrincipal::on_JugarMultiplayer_clicked));
	_salirButton.signal_clicked().connect(sigc::mem_fun(*this, &VentanaMenuPrincipal::on_Salir_clicked));
	
	_salirButton.set_focus_on_click(false);
	_singleplayerButton.set_focus_on_click(false);
	_multiplayerButton.set_focus_on_click(false);
	
	_grid->set_hexpand(true);
	_grid->set_vexpand(true);
	_grid->set_halign(Gtk::ALIGN_CENTER);
	_grid->set_valign(Gtk::ALIGN_END);
	
	_logo.set_size_request(100, 100);
	_logo.set_app_paintable(true);
	
	_singleplayerButton.set_label("Single player");
	_multiplayerButton.set_label("Multi player");
	_salirButton.set_label("Salir");
	
	add(*_grid);
	
	_grid->set_column_spacing(5);
	_grid->set_row_spacing(10);
	
	_grid->attach(_singleplayerButton, 4, 1, 2, 1);
	_grid->attach(_multiplayerButton, 4, 2, 2, 1);
	_grid->attach(_salirButton, 4, 3, 2, 1);
	_grid->attach(_logo, 0, 0, 10, 1);
	
//	_DibujarLogo();

	set_border_width(10);
	set_resizable(false);
//	show_all_children();
}

VentanaMenuPrincipal::~VentanaMenuPrincipal() {
	delete _grid;
	
	if (_ventanaMenuCliente) delete _ventanaMenuCliente;
}

void VentanaMenuPrincipal::on_JugarMultiplayer_clicked() {
	try {
		_ventanaMenuCliente = new VentanaMenuCliente(_cliente);
		_ventanaMenuClienteAbierta = true;
		_ventanaMenuCliente->show();		
	} catch(Excepcion& pEx) {
		// Mostrar error de conexion????
	}
}

void VentanaMenuPrincipal::on_JugarSingleplayer_clicked() {
//	std::cout << "Jugar singleplayer\n";
	
//	if (!_ventanaMenuClienteAbierta) {
//		if (_ventanaMenuCliente) delete _ventanaMenuCliente;
//		_ventanaMenuCliente = new VentanaMenuCliente();		
//		_ventanaMenuClienteAbierta = true;
//		_ventanaMenuCliente->show();
//	}
//	_ventanaJuego = new VentanaJuego(/*PATH_FONDO, */_cliente, 30);
//	_ventanaJuego->SetImagenFondo(PATH_FONDO);
//	_ventanaJuego->SetImagenCerdito(PATH_CERDITO);
//	_ventanaJuego->SetImagenPajaro(PATH_PAJARITO);
//	_ventanaJuego->show();
//	
//	_dummyWindow = new Gtk::Window();
//	_dummyWindow->set_default_size(800, 600);	
//	_dummyWindow->set_position(Gtk::WIN_POS_CENTER_ALWAYS);
//	_dummyWindow->set_title("Cerditos furiosos");	
//	_dummyWindow->add(*_ventanaJuego);
//	_dummyWindow->show();
}

void VentanaMenuPrincipal::on_Salir_clicked() {
//	std::cout << "Jugar salir\n";
	hide();	
}

//void VentanaMenuPrincipal::_DibujarLogo() {
//	Cairo::RefPtr<Cairo::Context> context = 
//			_logo.get_window()->create_cairo_context();
//	
//	Glib::RefPtr<Gdk::Pixbuf> imagenLogo = 
//			Gdk::Pixbuf::create_from_file(PATH_LOGO)->scale_simple(
//			_logo.get_width(), 
//			_logo.get_height(), 
//			Gdk::INTERP_NEAREST);
//	
//	Gdk::Cairo::set_source_pixbuf(context, imagenLogo, 0, 0);
//	context->rectangle(0, 0, _logo.get_width(), _logo.get_height());
//	context->fill();
//	
//	context->restore();
//}

void VentanaMenuPrincipal::Show() {
	this->show_all_children(true);
}

void VentanaMenuPrincipal::Hide() {
	this->hide();
}